import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        List<List<String>> list = new LinkedList<>();
        list.add(new ArrayList<>());
        int n = in.nextInt();
        int m = in.nextInt();
        List<List<String>> ini = initList(m);

        for (int i = 1; i <= n; i++) {
            list.add(dfs(i, m, n, ini));
        }

        for (List<String> strings : list) {
            for (String s : strings) {
                System.out.println(s);
            }
        }
        if (n >= m) {
            System.out.println(m);
        }
    }

    private static List<String> dfs(int s, // 源数据 (下标)
                                    int m,
                                    int n,
                                    List<List<String>> ini) {
        List<String> list = new LinkedList<>();
        if (s >= m) {
            return new ArrayList<>();
        }
        for (int i = 0; i < ini.get(m-s).size(); i++) {
            StringBuilder str = new StringBuilder();
            str.append(s).append(" ");
            if (Integer.parseInt(ini.get(m-s).get(i).charAt(0)+"") > s
                    && Integer.parseInt(ini.get(m-s).get(i).charAt(0)+"") <= n) {
                str.append(ini.get(m - s).get(i));
                list.add(str.toString());
            }
        }
        return list;
    }


    // 将表中对应的下标分解为两个数字相加
    private static List<List<String>> initList(int m) {
        List<List<String>> list = new LinkedList<>();
        list.add(new LinkedList<>());
        for (int i = 1; i <= m; i++) {
            List<String> l = new LinkedList<>();
            l.add(i+"");
            for (int j = 1; j <= i/2; j++) {
                if (i - j < i && i - j > 1 && j != i - j) {
                    l.add(j + " " + (i - j) + " ");
                }
            }
            list.add(l);
        }
        return list;
    }


    // 电话号码
    public static void main1(String[] args) {
        Map<Character, Integer> map = initMap();
        Scanner in = new Scanner(System.in);

        while (in.hasNextInt()) {
            int n = in.nextInt();
            List<String> list = new ArrayList<>();

            for (int i = 0; i < n; i++) {
                String s = in.next();
                s = s.replaceAll("-", "");
                for (int j = 0; j < s.length(); j++) {
                    if (!Character.isDigit(s.charAt(j))) {
                        s = s.replaceFirst(s.charAt(j) + "", map.get(s.charAt(j)) + "");
                    }
                }
                if (!list.contains(s)) {
                    list.add(s);
                }
            }
            Collections.sort(list);
            for (String s : list) {
                for (int i = 0; i < s.length(); i++) {
                    System.out.print(s.charAt(i));
                    if (i == 2) {
                        System.out.print("-");
                    }
                }
                System.out.println();
            }
            System.out.println();
        }

    }

    private static Map<Character, Integer> initMap() {
        Map<Character, Integer> map = new HashMap<>();
        map.put('A', 2);
        map.put('B', 2);
        map.put('C', 2);
        map.put('D', 3);
        map.put('E', 3);
        map.put('F', 3);
        map.put('G', 4);
        map.put('H', 4);
        map.put('I', 4);
        map.put('J', 5);
        map.put('K', 5);
        map.put('L', 5);
        map.put('M', 6);
        map.put('N', 6);
        map.put('O', 6);
        map.put('P', 7);
        map.put('Q', 7);
        map.put('R', 7);
        map.put('S', 7);
        map.put('T', 8);
        map.put('U', 8);
        map.put('V', 8);
        map.put('W', 9);
        map.put('X', 9);
        map.put('Y', 9);
        map.put('Z', 9);
        return map;
    }
}
